package com.linyaonan.leetcode.easy._1200;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 给你个整数数组 arr，其中每个元素都 不相同。
 * <p>
 * 请你找到所有具有最小绝对差的元素对，并且按升序的顺序返回。
 * <p>
 *  
 * <p>
 * 示例 1：
 * <p>
 * 输入：arr = [4,2,1,3]
 * 输出：[[1,2],[2,3],[3,4]]
 * 示例 2：
 * <p>
 * 输入：arr = [1,3,6,10,15]
 * 输出：[[1,3]]
 * 示例 3：
 * <p>
 * 输入：arr = [3,8,-10,23,19,-4,-14,27]
 * 输出：[[-14,-10],[19,23],[23,27]]
 *  
 * <p>
 * 提示：
 * <p>
 * 2 <= arr.length <= 10^5
 * -10^6 <= arr[i] <= 10^6
 *
 * @author: Lin
 * @date: 2020/1/7
 */
public class MinimumAbsolute {
    public List<List<Integer>> minimumAbsDifference(int[] arr) {
        Arrays.sort(arr);
        List<List<Integer>> result = new ArrayList<>();
        int min = arr[1] - arr[0];
        List<Integer> first = new ArrayList<>();
        first.add(arr[0]);
        first.add(arr[1]);
        result.add(first);
        for (int i = 1; i < arr.length - 1; i++) {
            int sum = arr[i + 1] - arr[i];
            if (sum > min) {
                continue;
            }
            if (arr[i + 1] - arr[i] < min) {
                min = arr[i + 1] - arr[i];
                result.clear();
            }
            List<Integer> save = new ArrayList<>();
            save.add(arr[i]);
            save.add(arr[i + 1]);
            result.add(save);
        }
        return result;
    }
}
